Each of those aspects is
important (especially performance) and should be discussed when you're
considering moving applications to the cloud. In addition to security,
performance is one of the primary items of concern that companies have
about cloud computing. One of the last things a company wants to do is
decide to take a critical application and move it to the cloud, only to
find that it doesn't perform as well as the on-premises version of the
app.
Don't get the idea that
moving an on-premises application to the cloud automatically results in
security issues and a loss of performance—that isn't the case. With
planning and the right approach, you can achieve a very successful
application deployment into the cloud.
This discussion is really
about two things. First, when deciding to move an application to the
cloud, do you move the entire application (meaning, database and app) or
just a portion? Second, regardless of whether you move all or a portion
of the database, do you also move the application, or do you keep the
application on-premises? Let's not forget that using SQL Azure doesn't
mean you automatically have to move your application to the Azure
platform. You can move your database to the cloud and still host your
application on-premises. As with everything, you have options. Let's
discuss the different ways of hosting your SQL Azure application.
1. On-Premise Application
On-premise
means your application is hosted locally and not in Azure, but your
database is in SQL Azure. Your application code uses client libraries to
access one or more SQL Azure databases. Some companies are reluctant to
put business logic or application-specific logic outside of their
corporate data center, and the on-premise option provides the ability to
house the data in the cloud while keeping the application logic local.
Although this is a viable
option, limitations are associated with it. For example, only the
following client libraries are supported:
.NET Framework 3.5 SP1 Data Provider for SQL Server (System.Data.SqlClient) or later
Entity Framework 3.5 SP1 or later
SQL Server 2008 R2 Native Client ODBC driver
SQL Server 2008 Native Client Driver (supported, but has less functionality)
SQL Server 2008 Driver for PHP version 1.1 or later
If your application uses OLE DB, you have to change your application so use one of the client libraries listed here.
The biggest
consideration related to keeping your application on-premise is the
cost. Any time you move data between SQL Azure and your on-premise
application, there is an associated cost (currently, $0.10 in and $0.15
out per GB, or more if your selected geolocation is Asia). If you're
using Azure Storage, there is also the cost of using that storage
(currently, $0.15 per GB stored per month). Again, this is per GB, so
the cost is low. An example of an expensive pattern is synchronizing
large amounts of data multiple times per day. But keep in mind that
synching even a 50GB database costs only $5.
These costs and
limitations shouldn't deter you from using an on-premise solution for
your application. However, let's look at what an Azure-hosted solution
provides.
2. Azure-Hosted Application
Azure-hosted
means that your application code is hosted in Windows Azure and your
database is in SQL Azure. Your application can still use the same client
libraries to access the database or databases in SQL Azure. Most
companies right now are taking existing ASP.NET applications and
publishing them to Windows Azure and accessing SQL Azure. However, you
aren't limited to just web apps: you can use a Windows desktop app or
Silverlight app that uses the Entity Framework and the WCF (Windows
Communication Foundation) Data Services client to access SQL Azure as
well. Again, you have plenty of options.
The benefit of using an
Azure-hosted solution is the ability to minimize network latency of
requests to the SQL Azure database. Just as important is the fact that
you're cutting the costs of data movement between SQL Azure and the
application. As long as your Windows Azure and SQL Azure are in the same
subregion, bandwidth usage between SQL Azure and Windows Azure is free.
By putting both your
application and database in Azure, you also get the benefit of more
efficient transactions between your app and the database, because doing
so minimizes the network latency between your application and the
database.
But you incur the compute cost, which is currently $0.12 per hour. Compute hours
is the time your application is deployed to Windows Azure. Even if your
application isn't in a running state, you're being billed. Billing is
per hour, and partial hours are billed as full hours. When developing
and testing your application, you should remove the compute instances
that aren't being used. Thus, the key here is to test locally before deploying remotely.
3. Which to Choose?
The decision to move
your application to the cloud versus keeping it local is entirely up to
you and shouldn't be determined solely by what you read in the last two
sections. The decision isn't that cut-and-dried. You need to look at
several other factors, such as costs, data traffic, and bandwidth, and
then base your decision of the analysis of this information. For
example, it may not be a sound decision for a small company with little
web traffic to host an application in Azure, due to the compute costs.
However, that same company can keep its database in Azure while keeping
the application on-premise because the data-transfer costs are minimal,
yet gain the benefits of SQL Azure (failover, and so on).
In many companies, the
initial goal isn't an all-or-nothing approach. The companies spend some
time looking at their databases and applications, decide what
functionality makes sense to put in the cloud, and test functionality on
that. They test for performance foremost, to ensure that when deployed
to Azure in production, performance is in the same ballpark. The thought
is to keep the important things up front to ensure a successful Azure
deployment. Roll your application out in pieces, if necessary, and test
locally prior to deployment.